package com.herench.bs.agent;

import java.util.Map;

/**
 * Created by ThinkPad on 2017/8/9.
 */
public interface IHospitalAgent {


    /**
     * 根据医院代码获取注册协议
     *
     * @param hospitalCode 医院编码
     * @return 返回执行后的结果信息
     * @see com.herench.bs.model.HospitalAgreement 以map式返回类的属性值
     */
    public Map<String, Object> getRegisterAgreement(String hospitalCode);

    /**
     * 根据医院代码查询
     *
     * @param hospitalCode 医院编码
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> getHospital(String hospitalCode);

    /**
     * 添加医院
     *
     * @param hospitalCode         医院代码
     * @param hospitalName         医院名
     * @param abbreviation         简称
     * @param type                 类别/综合性医院|专科医院
     * @param level                级别
     * @param logo                 图标
     * @param website              官网
     * @param hospitalAddress      医院地址
     * @param weChat               微信公众号
     * @param introduce            介绍
     * @param mapType              导航地图类别
     * @param LatitudeAndLongitude 经纬度
     * @param telephone            预约电话
     * @return 返回执行后的结果信息
     * @see com.herench.bs.model.Hospital 医院信息实体类
     */
    public Map<String, Object> addHospital(String hospitalCode, String hospitalName, String abbreviation, String type, String level, String logo, String website, String hospitalAddress, String weChat, String introduce, String mapType, String LatitudeAndLongitude, String telephone);

    /**
     * 修改医院信息
     *
     * @param params 医院信息参数
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> modifyHospital(Map<String, Object> params);

    /**
     * 删除医院信息
     *
     * @param hospitalCode 医院代码
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> deleteHospital(String hospitalCode);

    /**
     * 添加医院楼层信息
     *
     * @param hospitalCode 医院代码
     * @param floor        楼层
     * @param title        标题
     * @param contentUrl   链接
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> addHospitalFloorInfo(String hospitalCode, int floor, String title, String contentUrl);

    /**
     * 修改医院楼层信息
     *
     * @param hospitalCode 医院代码
     * @param floor        楼层
     * @param title        标题
     * @param contentUrl   链接
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> modifyHospitalFloorInfo(String hospitalCode, int floor, String title, String contentUrl);

    /**
     * 获取医院楼层信息
     *
     * @param hospitalCode 医院代码
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> getHospitalFloorInfo(String hospitalCode);

    /**
     * 添加科室类别
     *
     * @param hospitalCode  医院代码
     * @param deptClassCode 科室类别代码
     * @param deptClassName 科室类别名称
     * @param sort          排序
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> addHospitalDeptType(String hospitalCode, String deptClassCode, String deptClassName, int sort);


    /**
     * 修改医院科室类别信息
     *
     * @param params 医院科室信息参数
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> addHospitalDeptType(Map<String, Object> params);

    /**
     * 查询医院科室类别及子科室列表
     *
     * @param params 查询医院科室的条件
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> loadHospitalDeptTypes(Map<String, Object> params);

    /**
     * 查询医院科室类别列表
     *
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> loadHospitalDeptTypes();

    /**
     * 添加医院科室
     *
     * @param hospitalCode     医院代码
     * @param deptCode         院内科室代码
     * @param deptName         院内科室名
     * @param standardDeptCode 对应标准科室代码
     * @param deptClassCode    科室类别
     * @param introduce        科室介绍
     * @param special          是否为特色科室
     * @param specialContent   科室特色描述
     * @param sort             显示排序
     * @param open             是否开放
     * @param deptAddress      科室地址
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> addHospitalDept(String hospitalCode, String deptCode, String deptName, String standardDeptCode, String deptClassCode, String introduce, String special, String specialContent, String sort, String open, String deptAddress);

    /**
     * 修改医院科室信息
     *
     * @param params 医院科室信息参数
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> modifyHospitalDept(Map<String, Object> params);

    /**
     * 删除医院科室信息
     *
     * @param hospitalCode 医院代码
     * @param deptCode     院内科室代码
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> deleteHospitalDept(String hospitalCode, String deptCode);

    /**
     * 根据医院编码查询所有科室
     *
     * @param hospitalCode 医院编码
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> loadDeptsByHospitalCode(String hospitalCode);

    /**
     * 根据不同条件查询科室列表  hospitalCode 为必输项，其他为模糊查询
     *
     * @param params 科室查询条件
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> loadDeptsByConditions(Map<String, Object> params);

    /**
     * 根据医院编码添加医生信息
     *
     * @param doctorCode      医生编码
     * @param iconUrl         头像url
     * @param innerCode       内部编码
     * @param hospitalCode    医院编码
     * @param doctorName      医生姓名
     * @param titleCode       职称代码
     * @param sex             性别
     * @param jobCode         职务
     * @param educationalCode 最高学历代码
     * @param major           专长
     * @param mblog           微博
     * @param webChat         微信
     * @param introduce       介绍
     * @param sort            内部排序
     * @param available       是否可用
     * @return 返回执行后的结果信息  返回执行后的结果信息
     */
    public Map<String, Object> addDoctor(String doctorCode, String iconUrl, String innerCode, String hospitalCode, String doctorName, String titleCode, String sex, String jobCode, String educationalCode, String major, String mblog, String webChat, String introduce, String sort, boolean available);

    /**
     * 根据医院编码添加医生信息
     *
     * @param params 医生信息参数
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> modifyDoctor(Map<String, Object> params);


    /**
     * 删除医生信息
     *
     * @param hospitalCode 医院编码
     * @param doctorCode   医生编码
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> deleteDoctor(String hospitalCode, String doctorCode);

    /**
     * 根据不同条件查询医院医生 可分页
     *
     * @param params 查询条件
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> loadDoctorByConditions(Map<String, Object> params);

    /**
     * 添加科室医生
     *
     * @param hospitalCode 医院编码
     * @param deptCode     科室编码
     * @param doctorCode   医生编码
     * @param available    是否有效
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> addDoctorToDept(String hospitalCode, String deptCode, String doctorCode, boolean available);

    /**
     * 修改科室医生
     *
     * @param hospitalCode 医院编码
     * @param deptCode     科室编码
     * @param doctorCode   医生编码
     * @param available    是否有效
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> modifyDoctorOfDept(String hospitalCode, String deptCode, String doctorCode, boolean available);


    /**
     * 删除科室医生
     *
     * @param hospitalCode 医院编码
     * @param deptCode     科室编码
     * @param doctorCode   医生编码
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> deleteDoctorOfDept(String hospitalCode, String deptCode, String doctorCode);

    /**
     * 查询医生科室列表，可分页
     *
     * @param params 查询参数
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> loadDoctorOfDepts(Map<String, Object> params);


    /**
     * 添加医院资讯
     *
     * @param hospitalInfoId 医院资讯id
     * @param hospitalCode   医院编码
     * @param infoType       资讯类别
     * @param title          标题
     * @param sort           排序
     * @param iconUrl        图标url
     * @param display        是否显示
     * @param contentUrl     内容连接
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> addHospitalInfo(String hospitalInfoId, String hospitalCode, String infoType, String title, String sort, String iconUrl, boolean display, String contentUrl);


    /**
     * 修改医院资讯
     *
     * @param params 医院资讯参数
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> modifyHospitalInfo(Map<String, Object> params);

    /**
     * 查询医院资讯 可分页
     *
     * @param params 医院资讯参数
     * @return 返回执行后的结果信息
     */
    public Map<String, Object> loadHospitalInfo(Map<String, Object> params);

    /**
     * 查询导诊身体部位列表
     *
     * @param sex 性别 0 未知，1 男 2女
     * @return 返回查询的身体部位数据列表
     */
    public Map<String, Object> loadBodyParts(String sex);

    /**
     * 根据部位查询症状列表
     *
     * @param partId 部位id
     * @return 返回查询到的数据列表
     */
    public Map<String, Object> loadSymptoms(String partId);

    /**
     * 根据症状查询并发症列表
     *
     * @param sex   性别
     * @param symId 症状id
     * @return 返回查询到的数据列表
     */
    public Map<String, Object> loadComplications(String sex, String symId);

    /**
     * 症状科室查询
     *
     * @param symId     症状id
     * @param symMapIds 并发症id，以“,”分开
     * @return
     */
    public Map<String, Object> loadSymptomCorrespondDepts(String symId, String symMapIds);


    Map<String,Object> loadAgreement(String hospitalCode, String type);
}
